package com.ls.lserp.modules.custom.service;

import com.ls.lserp.common.persistence.Page;
import com.ls.lserp.common.service.CrudService;
import com.ls.lserp.common.utils.CacheUtils;
import com.ls.lserp.common.utils.CollectionsUtils;
import com.ls.lserp.modules.custom.dao.FitPropertyDao;
import com.ls.lserp.modules.order.entity.FitProperty;
import com.ls.lserp.modules.custom.utils.FitPropertyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


/**
  * @ClassName: FitPropertyService
  * @Description: 量体保存 修改 删除方法
  * 
  * @author 曹学海
  * @date 2016年11月1日 下午3:10:15
  *
  */

@Service
@Transactional(readOnly = true)
public class FitPropertyService extends CrudService<FitPropertyDao, FitProperty> {
	@Autowired
	
	// 量体项目方法接口
	private FitPropertyDao fitpropertyDao;
	

    /**
      * @Title: findList
      * @Description: 一览页面查询
      * @param @param page
      * @param @param fitproperty
      * @param @return
      * @return Page<FitProperty> 
      * @throws
      */
    
    public Page<FitProperty> findList(Page<FitProperty> page, FitProperty fitproperty) {
        
    	// 设置分页参数
    	fitproperty.setPage(page);
    	
        // 执行分页查询
        page.setList(fitpropertyDao.findList(fitproperty));
        
        // 返回值
        return page;
    }
    
	/**
	  * @Title: getFitProperty
	  * @Description: 获取量体信息
	  * @param @param id
	  * @param @return
	  * @return FitProperty 
	  * @throws
	  */
	
	public FitProperty getFitProperty(Long id){
		
	        // 实例化实体类
	    	FitProperty fitproperty=new FitProperty();
	    	
	        // 执行查询语句，查询量体项目数据
	    	fitproperty=fitpropertyDao.get(id);
	        
	        return fitproperty;
	    }

    /**
      * @Title: findSubFitProperty
      * @Description: 子项目查询
      * @param @param page
      * @param @param fitproperty
      * @param @return
      * @return List<FitProperty> 
      * @throws
      */
    
    public List<FitProperty> findSubFitProperty(Page<FitProperty> page, FitProperty fitproperty) {
        
    	// 执行查询
        return fitpropertyDao.findSubFitProperty(fitproperty);
    }

    /**
      * @Title: findSubFitProperty
      * @Description: 子项目查询
      * @param @param fitproperty
      * @param @return
      * @return List<FitProperty> 
      * @throws
      */
    
    public List<FitProperty> findSubFitProperty( FitProperty fitproperty) {
    	
        // 执行查询
        return fitpropertyDao.findSubFitProperty(fitproperty);
    }

	/**
	  * @Title: saveFitProperty
	  * @Description: 保存及更新
	  * @param @param fitproperty
	  * @return void 
	  * @throws
	  */
	
	@Transactional(readOnly = false)
	public void saveFitProperty(FitProperty fitproperty) {
		
		// 新建
		if (fitproperty.getId()==null){
			
			fitproperty.preInsert();
			
			fitpropertyDao.insert(fitproperty);
			
		// 编辑
		}else{
			
			// 更新数据
			fitproperty.preUpdate();
			
			// 更新数据
			fitpropertyDao.update(fitproperty);
		}
		
		// 子项数据删除
		//fitpropertyDao.physicallyDeleteAllSub(fitproperty);
		
		// 判断子项数据是否为空
		if(!CollectionsUtils.isEmpty(fitproperty.getFitpropertyList())){
			for(int i=0;i<fitproperty.getFitpropertyList().size();i++){
				int count = fitpropertyDao.findSubCount(fitproperty.getFitpropertyList().get(i).getPropertyValue());
				//子项数据不存在
				if (count ==0){
					fitproperty.getFitpropertyList().get(i).preInsert();
					// 给子项赋值（关联值）
					fitproperty.getFitpropertyList().get(i).setPropertyCd(fitproperty.getPropertyValue());
					fitpropertyDao.insertSub(fitproperty.getFitpropertyList().get(i));
				}else{
					fitproperty.getFitpropertyList().get(i).preUpdate();
					//版本号+1
					fitproperty.getFitpropertyList().get(i).setVersion(fitproperty.getFitpropertyList().get(i).getVersion() +1);
					fitpropertyDao.update(fitproperty.getFitpropertyList().get(i));

				}
			}

/*		// 遍历赋值
        for( FitProperty  f: fitproperty.getFitpropertyList() ){
        		// 创建人信息
        		f.preInsert();
        		// 给子项赋值（关联值）
				f.setPropertyCd(fitproperty.getPropertyValue());
				
				// 给子项赋值（款式分类，但子项查看编辑不显示该数据）
				//f.setStyleCategoryCd(fitproperty.getStyleCategoryCd());
			}*/
        	// 执行插入操作

		}
		
		CacheUtils.remove(FitPropertyUtils.CACHE_FITPROPERTY_MAP);
        CacheUtils.remove(FitPropertyUtils.CACHE_FITPROPERTY_VALUE_MAP);
	}

	/**
	  * @Title: deleteFitProperty
	  * @Description: 删除
	  * @param @param fitproperty
	  * @return void 
	  * @throws
	  */
	
	@Transactional(readOnly = false)
	public void deleteFitProperty(FitProperty fitproperty) {
		// 执行逻辑子项数据删除
		fitpropertyDao.logicDeleteAllSub(fitproperty);
		// 执行删除（逻辑删除）
		fitpropertyDao.delete(fitproperty);
		
		CacheUtils.remove(FitPropertyUtils.CACHE_FITPROPERTY_MAP);
        CacheUtils.remove(FitPropertyUtils.CACHE_FITPROPERTY_VALUE_MAP);
	}

	/**
	  * @Title: physicallyFitPropertyDeleteAllSub
	  * @Description: 删除所有子项目
	  * @param @param fitproperty
	  * @return void 
	  * @throws
	  */
	
	@Transactional(readOnly = false)
	public void physicallyFitPropertyDeleteAllSub(FitProperty fitproperty) {
		
		// 执行子项物料删除
		fitpropertyDao.physicallyDeleteAllSub(fitproperty);
	}
	
	/**
	  * @Title: getPropertyValue
	  * @Description: 查重项目值
	  * @param @param propertyValue
	  * @param @param propertyCd
	  * @param @return
	  * @return FitProperty 
	  * @throws
	  */
	
	public FitProperty getPropertyValue(String propertyValue) {
		
		// 实力化实体类
		FitProperty fitproperty = new FitProperty();
		
		// 给量体实体类赋值（量体值）
		fitproperty.setPropertyValue(propertyValue);
		
		// 通过量体代码和量体值查询是否重复
		return fitpropertyDao.getPropertyValue(fitproperty);
	}
	
	
	/**
	  * @Title: getPropertyCd
	  * @Description: 查重项目代码
	  * @param @param propertyCd
	  * @param @return
	  * @return FitProperty 
	  * @throws
	  */
	
	public FitProperty getPropertyCd(String propertyCd) {
		
		// 实力化实体类
		FitProperty fitproperty = new FitProperty();
		
		// 给量体实体类赋值（量体代码）
		fitproperty.setPropertyCd(propertyCd);
		
		// 通过量体代码和量体值查询是否重复
		return fitpropertyDao.getPropertyCd(fitproperty);
	}
	
	
	
    /**
     * 查询所有数据包括已删除
     * @param fitproperty
     * @return
     */
    
    public List<FitProperty> findAllListExport( FitProperty fitproperty) {
        // 执行查询
        return fitpropertyDao.findAllListExport(fitproperty);
    }
    
    /**
     * 导入excel
     * @param list
     * @return
     */
    @Transactional(readOnly = false)
    public Integer saveFitPropertyImport(List<FitProperty> list) {
        
    	fitpropertyDao.deleteAll(new FitProperty());
        Integer i=0;
        for (FitProperty fitproperty : list) {
        	fitproperty.preInsert();
            // 新建版本号赋值1
        	fitproperty.setVersion(1L);
        	fitpropertyDao.insert(fitproperty);
            i++;
        }
        return i;
    }
}
